home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / as5.zip / FFWD.C < prev    next >
Text File  |  1987-12-09  |  2KB  |  75 lines

  1. /*
  2.  *      file I/O version of forward ref handler
  3.  */
  4.  
  5. #define    FILEMODE    0644    /* file creat mode */
  6. #define    UPDATE        2    /* file open mode */
  7. #define    ABS        0    /* absolute seek */
  8.  
  9. int    Forward =0;        /* temp file's file descriptor    */
  10. char    Fwd_name[] = { "Fwd_refs" } ;
  11.  
  12. /*
  13.  *      fwdinit --- initialize forward ref file
  14.  */
  15. fwdinit()
  16. {
  17.     Forward = creat(Fwd_name,FILEMODE);
  18.     if(Forward <0)
  19.         fatal("Can't create temp file");
  20.     close(Forward); /* close and reopen for reads and writes */
  21.     Forward = open(Fwd_name,UPDATE);
  22.     if(Forward <0)
  23.         fatal("Forward ref file has gone.");
  24. #ifndef DEBUG
  25.     unlink(Fwd_name);
  26. #endif
  27. }
  28.  
  29. /*
  30.  *      fwdreinit --- reinitialize forward ref file
  31.  */
  32. fwdreinit()
  33. {
  34.     F_ref   = 0;
  35.     Ffn     = 0;
  36.     lseek(Forward,0L,ABS);   /* rewind forward refs */
  37.     read(Forward,&Ffn,sizeof(Ffn));
  38.     read(Forward,&F_ref,sizeof(F_ref)); /* read first forward ref into mem */
  39. #ifdef DEBUG
  40.     printf("First fwd ref: %d,%d\n",Ffn,F_ref);
  41. #endif
  42. }
  43.  
  44. /*
  45.  *      fwdmark --- mark current file/line as containing a forward ref
  46.  */
  47. fwdmark()
  48. {
  49.     write(Forward,&Cfn,sizeof(Cfn));
  50.     write(Forward,&Line_num,sizeof(Line_num));
  51. }
  52.  
  53. /*
  54.  *      fwdnext --- get next forward ref
  55.  */
  56. fwdnext()
  57. {
  58.     int stat;
  59.  
  60.     stat = read(Forward,&Ffn,sizeof(Ffn));
  61. #ifdef DEBUG
  62.     printf("Ffn stat=%d ",stat);
  63. #endif
  64.     stat = read(Forward,&F_ref,sizeof(F_ref));
  65. #ifdef DEBUG
  66.     printf("F_ref stat=%d  ",stat);
  67. #endif
  68.     if( stat < 2 ){
  69.         F_ref=0;Ffn=0;
  70.         }
  71. #ifdef DEBUG
  72.     printf("Next Fwd ref: %d,%d\n",Ffn,F_ref);
  73. #endif
  74. }
  75.